﻿///////////////////////////////////////////////////////////////////////////////
// 文件名： SceneNode.hpp
// 作者：   671643387@qq.com
// 日期：   2015年11月1日 下午6:39:45
// 简介：   
///////////////////////////////////////////////////////////////////////////////

#if !defined(GRAPHICS_GRAPHICS_SCENENODE_HPP_)
#define GRAPHICS_GRAPHICS_SCENENODE_HPP_

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif

#include <string>
#include <boost/noncopyable.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/unordered_map.hpp>

#include <graphics/Component.hpp>

namespace graphics
{
    namespace graphics
    {
        class Scene;
        class SceneNode;
        typedef boost::shared_ptr<SceneNode> SceneNodePtr;

        class SceneNode : public boost::noncopyable
        {
        public:
            typedef boost::unordered_map<std::string, ::graphics::ComponentPtr> ComponentMap;

            enum Type
            {
                Camera = 1,
                Light,
                GraphicsNode
            };

        public:
            SceneNode(void);
            SceneNode(Type type);
            virtual ~SceneNode(void);

        public:
            Type GetType(void) const;

            void AddComponent(ComponentPtr component);
            void RemoveComponent(std::string& name);
            ::graphics::ComponentPtr GetComponent(std::string& name);

            virtual Scene* GetScene(void) const;

        protected:
            Type type_;

        private:
            ComponentMap components_;
        };
    }
}

#endif //GRAPHICS_GRAPHICS_SCENENODE_HPP_
